import loginApi from '@/api/auth/loginApi'
import userCenterApi from '@/api/sys/userCenterApi'
import dictApi from '@/api/dev/dictApi'
import router from '@/router'
import tool from '@/utils/tool'
import { message } from 'ant-design-vue'
import { useGlobalStore } from '@/store'
import { CommonSwitchEnum } from '@/utils/enum'
import personSwapRuleApi from '@/api/biz/crm/personSwapRuleApi'
import { routerToCommon } from '@/utils/request'

const formatHiddenMenu = (menu, indexMenu) => {
	const formatFn = (array, indexMenu) => {
		array.forEach((item) => {
			if (!item.children) {
				Object.assign(item.meta, {
					hidden: item.hideFlag === CommonSwitchEnum.TRUE,
					active: item.activePath,
					affix: item.path === indexMenu
				})
			} else {
				formatFn(item.children, indexMenu)
			}
		})
	}
	formatFn(menu, indexMenu)
}

export const afterLogin = async (loginToken) => {
	// tool.data.set('TOKEN', loginToken)
	// // 获取登录的用户信息
	// const loginUser = await loginApi.getLoginUser()
	// const globalStore = useGlobalStore()
	// globalStore.setUserInfo(loginUser)
	// tool.data.set('USER_INFO', loginUser)
	//
	// // 获取用户的菜单
	// const menu = await userCenterApi.userLoginMenu()
	// let indexMenu = menu[0].children[0].children[0].path
	// formatHiddenMenu(menu, indexMenu)
	// tool.data.set('MENU', menu)
	// // 重置系统默认应用
	// tool.data.set('SNOWY_MENU_MODULE_ID', menu[0].id)
	// message.success('登录成功')
	// if (tool.data.get('LAST_VIEWS_PATH')) {
	// 	// 如果有缓存，将其登录跳转到最后访问的路由
	// 	indexMenu = tool.data.get('LAST_VIEWS_PATH')
	// }
	// // 如果存在退出后换新账号登录，进行重新匹配，匹配无果则默认首页
	// if (menu) {
	// 	let routerTag = 0
	// 	menu.forEach((item) => {
	// 		if (item.children) {
	// 			if (JSON.stringify(item.children).indexOf(indexMenu) > -1) {
	// 				routerTag++
	// 			}
	// 		}
	// 	})
	// 	if (routerTag === 0) {
	// 		indexMenu = menu[0].children[0].children[0].path
	// 	}
	// }
	// await router.replace({
	// 	path: indexMenu
	// })
	// dictApi.dictTree().then((data) => {
	// 	// 设置字典到store中
	// 	tool.data.set('DICT_TYPE_TREE_DATA', data)
	// })

	const indexMenu = await newAfterLogin(loginToken)
	await router.replace({
		path: indexMenu
	})
}

export const newAfterLogin = async (loginToken, msgStatus = true) => {
	tool.data.set('TOKEN', loginToken)
	// // 获取登录的用户信息
	// const loginUser = await loginApi.getLoginUser()
	//
	// // 模拟用户按钮权限
	// // loginUser.buttonCodeList.push(
	// // 	...[
	// // 		'bizContractPaymentView',
	// // 		'bizContractPaymentApply',
	// // 		'bizFinancePaymentView',
	// // 		'bizFinancePaymentApprove',
	// // 		'bizFinancePaymentExport'
	// // 	]
	// // )
	//
	// const globalStore = useGlobalStore()
	// globalStore.setUserInfo(loginUser)
	// tool.data.set('USER_INFO', loginUser)
	await getUserInfo()

	// 获取用户的菜单
	const menu = await userCenterApi.userLoginMenu()
	if (!menu[0].children) {
		await router.replace('/noMenu')
		return
	}
	let indexMenu = menu[0].children[0].children[0].path
	formatHiddenMenu(menu, indexMenu)

	// 模拟补款管理菜单
	// menu[0].children.push({
	// 	category: 'MENU',
	// 	children: [
	// 		{
	// 			category: 'MENU',
	// 			children: [
	// 				{
	// 					activeId: '1725388785886855171',
	// 					activePath: '/biz/contractPayment/index',
	// 					category: 'MENU',
	// 					component: 'biz/contractPayment/detail',
	// 					createTime: '2023-11-20 11:37:38',
	// 					createUser: '1543837863788879871',
	// 					deleteFlag: 'NOT_DELETE',
	// 					hideFlag: 'true',
	// 					icon: 'snippets-outlined',
	// 					id: '1726444662488563714',
	// 					menuType: 'MENU',
	// 					meta: {
	// 						active: '/biz/contractPayment/index',
	// 						affix: false,
	// 						hidden: true,
	// 						icon: 'snippets-outlined',
	// 						title: '合同补款详情',
	// 						type: 'menu'
	// 					},
	// 					module: '1548901111999773976',
	// 					name: 'contractPaymentDetail',
	// 					parentId: '1725388785886855171',
	// 					path: '/biz/contractPayment/detail/:id',
	// 					sortCode: 1,
	// 					title: '合同补款详情',
	// 					updateTime: '2023-12-13 17:35:41',
	// 					updateUser: '1543837863788879871',
	// 					weight: 1
	// 				}
	// 			],
	// 			component: 'biz/contractPayment/index',
	// 			createTime: '2023-11-17 13:41:57',
	// 			createUser: '1543837863788879871',
	// 			deleteFlag: 'NOT_DELETE',
	// 			icon: 'snippets-outlined',
	// 			id: '1725388785886855171',
	// 			menuType: 'MENU',
	// 			meta: { icon: 'snippets-outlined', title: '合同补款', type: 'menu', hidden: false },
	// 			module: '1548901111999773976',
	// 			name: 'contractPayment',
	// 			parentId: '1725386584716115971',
	// 			path: '/biz/contractPayment/index',
	// 			sortCode: 1,
	// 			title: '合同补款',
	// 			weight: 1
	// 		},
	// 		{
	// 			category: 'MENU',
	// 			children: [
	// 				{
	// 					activeId: '1725388785886855172',
	// 					activePath: '/biz/financePayment/index',
	// 					category: 'MENU',
	// 					component: 'biz/financePayment/detail',
	// 					createTime: '2023-11-20 11:37:38',
	// 					createUser: '1543837863788879871',
	// 					deleteFlag: 'NOT_DELETE',
	// 					hideFlag: 'true',
	// 					icon: 'snippets-outlined',
	// 					id: '1726444662488563715',
	// 					menuType: 'MENU',
	// 					meta: {
	// 						active: '/biz/financePayment/index',
	// 						affix: false,
	// 						hidden: true,
	// 						icon: 'snippets-outlined',
	// 						title: '财务补款详情',
	// 						type: 'menu'
	// 					},
	// 					module: '1548901111999773976',
	// 					name: 'financePaymentDetail',
	// 					parentId: '1725388785886855172',
	// 					path: '/biz/financePayment/detail/:id',
	// 					sortCode: 1,
	// 					title: '财务补款详情',
	// 					updateTime: '2023-12-13 17:35:41',
	// 					updateUser: '1543837863788879871',
	// 					weight: 1
	// 				}
	// 			],
	// 			component: 'biz/financePayment/index',
	// 			createTime: '2023-11-17 13:41:57',
	// 			createUser: '1543837863788879871',
	// 			deleteFlag: 'NOT_DELETE',
	// 			icon: 'snippets-outlined',
	// 			id: '1725388785886855172',
	// 			menuType: 'MENU',
	// 			meta: { icon: 'snippets-outlined', title: '财务补款', type: 'menu', hidden: false },
	// 			module: '1548901111999773976',
	// 			name: 'financePayment',
	// 			parentId: '1725386584716115971',
	// 			path: '/biz/financePayment/index',
	// 			sortCode: 1,
	// 			title: '财务补款',
	// 			weight: 1
	// 		}
	// 	],
	// 	createTime: '2023-11-17 13:33:13',
	// 	createUser: '1543837863788879871',
	// 	deleteFlag: 'NOT_DELETE',
	// 	icon: 'copy-outlined',
	// 	id: '1725386584716115971',
	// 	menuType: 'CATALOG',
	// 	meta: { icon: 'copy-outlined', title: '补款管理', type: 'menu' },
	// 	module: '1548901111999773976',
	// 	name: '补款管理',
	// 	parentId: '1548901111999773976',
	// 	path: '/7131152274453172225',
	// 	sortCode: 80,
	// 	title: '补款管理',
	// 	weight: 100
	// })

	tool.data.set('MENU', menu)
	// 重置系统默认应用
	tool.data.set('SNOWY_MENU_MODULE_ID', menu[0].id)
	msgStatus && message.success('登录成功')
	if (tool.data.get('LAST_VIEWS_PATH')) {
		// 如果有缓存，将其登录跳转到最后访问的路由
		indexMenu = tool.data.get('LAST_VIEWS_PATH')
	}
	// 如果存在退出后换新账号登录，进行重新匹配，匹配无果则默认首页
	if (menu) {
		let routerTag = 0
		menu.forEach((item) => {
			if (item.children) {
				if (JSON.stringify(item.children).indexOf(indexMenu) > -1) {
					routerTag++
				}
			}
		})
		if (routerTag === 0) {
			indexMenu = menu[0].children[0].children[0].path
		}
	}
	const data = await dictApi.dictTree()
	// 设置字典到store中
	tool.data.set('DICT_TYPE_TREE_DATA', data)

	// 获取角色权限部门列表
	// await dealDeptList()

	return indexMenu
}

export const getUserInfo = async () => {
	// 获取登录的用户信息
	const loginUser = await loginApi.getLoginUser()

	// 模拟用户按钮权限
	// loginUser.buttonCodeList.push(
	// 	...[
	// 		'bizContractPaymentView',
	// 		'bizContractPaymentApply',
	// 		'bizFinancePaymentView',
	// 		'bizFinancePaymentApprove',
	// 		'bizFinancePaymentExport'
	// 	]
	// )

	const globalStore = useGlobalStore()
	globalStore.setUserInfo(loginUser)
	tool.data.set('USER_INFO', loginUser)
	return loginUser
}

// 获取角色权限部门列表
export const dealDeptList = async () => {
	const allDeptList = await personSwapRuleApi.orgDepartTree()

	const tree = JSON.parse(JSON.stringify(allDeptList[0]))
	tool.traverseDepartmentTreeDFS(tree, (item, parent) => {
		item.parentIds = [...(parent?.parentIds || []), parseInt(item.parentId)]
	})

	const globalStore = useGlobalStore()
	globalStore.setAllDeptList([tree])
	tool.data.set('ALL_DEPT_LIST', [tree])
}

// 退出登录
export const logout = (showLoading = true) => {
	// 取得缓存中的token
	const token = tool.data.get('TOKEN')
	const param = {
		token: token
	}
	if (showLoading) {
		message.loading('退出中...', 1)
	}
	loginApi
		.logout(param)
		.then(() => {
			// 清理掉个人的一些信息
			// tool.data.remove('TOKEN')
			// tool.data.remove('USER_INFO')
			// tool.data.remove('MENU')
			// tool.data.remove('PERMISSIONS')
			tool.data.clear()
			// router.replace({ path: '/login' })
			routerToCommon()
		})
		.catch(() => {
			tool.data.clear()
			// router.replace({ path: '/login' })
			// location.reload()
			routerToCommon()
		})
}
